home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Scene Storm
/
Scene Storm - Volume 1.iso
/
coding
/
asm
/
games
/
mapscroller
/
maptest2.s
< prev
next >
Wrap
Text File
|
1980-01-03
|
17KB
|
432 lines
section Framework,code
; incdir ff0:
include includes:libraries/dos_lib.i
include includes:exec/exec_lib.i
include includes:hardware/custom.i
Music equ 1
mapwidth equ 200 ;200 blocks in the x map
numobjects equ 20
Hardware equ $dff000
SystemCopper1 equ $26
SystemCopper2 equ $32
PortA equ $bfe001
ICRA equ $bfed01
LeftMouse equ 6
levelcols equ 32
panelcols equ 16 ;16 colours for the panel
FWidth equ 92 ;92 bytes wide
ScreenHeight equ 192 ;playing area 192 lines high (12 blocks)
NumberPlanes equ 5*1 ;3 planes in each playfield
BytesPerForePlane equ fwidth*ScreenHeight
ForegroundMemory equ NumberPlanes*BytesPerForePlane
MemNeeded equ ForegroundMemory
BWAIT MACRO
\@wot: btst #14,2(a6)
bne.s \@wot
ENDM
ANIMATE: MACRO
dc.l \1
dc.w \2,\3,\4,\5
endm
DEFINE_TRIG: MACRO
dc.w \1,\2,\3
dc.l \4
endm
*****************************************************************************
start: lea GraphicsName,a1 ;open the graphics library purely
move.l (4).w,a6 ;to find the system copper
jsr _LVOOldOpenLibrary(a6)
move.l d0,GraphicsBase
lea (Hardware).l,a6 ;$dff000 base hardware in a6
bsr TakeSystem ;kill this shitty amiga OS
lea variables(pc),a5 ;a5 is the variables pointer
lea main_screen(a5),a0
move.l #Mem,d0
move.l d0,MemBase
move.l d0,(a0)+ ;address of bitplane (1)
move.l d0,maintopleft ;address of bitplane (1)
add.l #BytesPerForePlane,d0
move.l d0,(a0)+ ;address of bitplane (2)
add.l #BytesPerForePlane,d0
move.l d0,(a0)+ ;address of bitplane (3)
add.l #BytesPerForePlane,d0
move.l d0,(a0)+ ;address of bitplane (4)
add.l #BytesPerForePlane,d0
move.l d0,(a0)+ ;address of bitplane (5)
move.l #clist,cop1lc(a6)
move.w #$87e0,dmacon(a6) ;enable copper,sprite,blitter
move.w #$7fff,intreq(a6) ;clear all int request flags
***************************************************************************
move.l #-1,bltafwm(a6) ;custom chips
;copy the level blocks colours into the copperlist
;-------------------------------------------------
lea blocks,a0 ;copy the level colours into the
lea levelpallette,a1 ;copperlist
move.w #levelcols-1,d0 ;number of colours to copy
.copy move.w (a0)+,2(a1)
addq #4,a1
dbf d0,.copy
jsr initscreen ;initialise the 1st screen displayed
Bwait
***************************************************************************
lea map+12*22*2+32,a0 ;skip all the mapper headers n stuff
move.l a0,fgndpointer(a5) ;set up the map index
move.l a0,fgndpointer2(a5) ;set up the map index
move.l a0,fgndpointer3(a5) ;set up the map index
move.w #24,pf2count(a5) ;width of the background in words
move.w #15,pf2scroll(a5)
lea scroll.value,a0
move.w #$ff,2(a0)
lea main_screen(a5),a0
lea copperlist,a1
move.w (a0),2(a1) ;adr of bpl (1) hi into $00e0
move.w 2(a0),6(a1) ;adr of bpl (1) lo into $00e2
move.w 4(a0),10(a1) ;adr of bpl (2) hi into $00e4
move.w 6(a0),14(a1) ;adr of bpl (2) lo into $00e6
move.w 8(a0),18(a1) ;adr of bpl (3) hi into $00e8
move.w 10(a0),22(a1) ;adr of bpl (3) lo into $00ea
move.w 12(a0),26(a1) ;adr of bpl (4) hi into $00ec
move.w 14(a0),30(a1) ;adr of bpl (4) lo into $00ee
move.w 16(a0),34(a1) ;adr of bpl (5) hi into $00f0
move.w 18(a0),38(a1) ;adr of bpl (5) lo into $00f2
clr.w scrolledge
clr.w window_xpos
***************************************************************************
* Main game loop with the routines we are yet to cover commented out
***************************************************************************
vloop: cmp.b #255,$dff006
bne vloop ;alternate every frame
btst #LeftMouse,PortA ;lest mouse button to exit
bne vloop
jmp finished
**************************************************************************
rsreset
screen.num RS.B 1
vcount RS.B 1 ;vertcal blank counter
pf1count RS.W 1 ;number of background words to scroll
pf2count RS.W 1 ;number of foreground words to scroll
pf1scroll RS.W 1 ;pixel scroll value (0-15) background
pf2scroll RS.W 1 ;pixel scroll value (0-15) foreground
pf1scroll2 RS.W 1
pf2offset RS.W 1
screenend RS.W 1
level.end RS.W 1
level.number RS.W 1
fgndpointer RS.L 1 ;foreground map pointer
fgndpointer2 RS.L 1 ;foreground map pointer
fgndpointer3 RS.L 1 ;foreground map pointer
main_screen RS.L 9 ;
screen_2 RS.L 9 ;
screen_3 RS.L 9 ;spare screen for restoration of the gfx
vars.length RS.B 0
variables DS.B vars.length
***************************************************************************
TakeSystem:
move.w intenar(a6),SystemInts save system interupts
move.w dmaconr(a6),SystemDMA and DMA settings
move.w #$7fff,intena(a6) kill everything!
move.w #$7fff,dmacon(a6)
move.b #%01111111,ICRA kill keyboard
move.l $68,Level2Vector save these interrupt vectors
move.l $6c,Level3Vector as we will use our own
rts keyboard & vblank routines
finished:
bsr FreeSystem
move.l 4.w,a6
move.l GraphicsBase,a1
jsr _LVOCloseLibrary(a6)
clr.l d0 ;stop that dos return error?
rts
FreeSystem:
move.l Level2Vector,$68 restore the system vectors
move.l Level3Vector,$6c and interrupts and DMA
move.l GraphicsBase,a1 and replace the system
move.l SystemCopper1(a1),Hardware+cop1lc copper list
move.l SystemCopper2(a1),Hardware+cop2lc
move.w SystemInts,d0
or.w #$c000,d0
move.w d0,intena(a6)
move.w SystemDMA,d0
or.w #$8100,d0
move.w d0,dmacon(a6)
move.b #%10011011,ICRA keyboard etc back on
rts
*******************************************************************************
Level2Vector dc.l 0
Level3Vector dc.l 0
SystemInts dc.w 0
SystemDMA dc.w 0
MemBase dc.l 0
DOSBase dc.l 0
GraphicsBase dc.l 0
even
scrolledge: dc.w 0
even
GraphicsName dc.b 'graphics.library',0
even
DOSName dc.b 'dos.library',0
even
standingblock: dc.w 0 ;0 to 65535 blocks
even
window_xpos dc.w 0
even
scrollspeed dc.w 1
even
maintopleft dc.l 0 ;address of the main screen in ram
even
sparetopleft dc.l 0 ;address of the d//b screen in ram
even
bodgeit: dc.w 0
ship_screenx dc.b 0
even
bpl1main dc.l 0
bpl2main dc.l 0
bpl3main dc.l 0
bpl4main dc.l 0
bpl5main dc.l 0
even
bpl1spare dc.l 0
bpl2spare dc.l 0
bpl3spare dc.l 0
bpl4spare dc.l 0
bpl5spare dc.l 0
even
screen_flip: dc.b 0
even
gamestart_timer: dc.w 100
even
*****************************************************************************
initscreen: move.w #$09f0,bltcon0(a6) minterm for D = A
clr.w bltcon1(a6)
move.w #38,bltamod(a6)
move.w #fwidth-2,bltdmod(a6)
Bwait
lea map+32,a0
lea offsetab,a2
lea putdowntab,a3
move.w #12*22-1,d7 ;12 down ,22 columns across
scrloop: move.w (a0)+,d0 ;block number in the map
add.w d0,d0 ;x2 (index words)
lea blocks+32*2,a1 ;+64 to skip 32 cols pallette info.
add.w (a2,d0.w),a1 ;a1=addr of block to blit
move.w (a3)+,d6 ;next screen addr to plot block
lea main_screen(a5),a4 ;get the current foreground
Plane1: move.l (a4)+,d1 ;address of bitplane 1 in d1
add.l d6,d1 ;add d6-(block putdown offset)
move.l d1,bltdpt(a6) ;blit a 16x16 pixel block
move.l a1,bltapt(a6) ;into the foreground screen
move.w #16*64+1,bltsize(a6)
bwait
Plane2: move.l (a4)+,d2 ;address of bitplane 2 in d2
add.l d6,d2 ;add d6-(block putdown offset)
move.l d2,bltdpt(a6)
lea 40*256(a1),a1
move.l a1,bltapt(a6)
move.w #16*64+1,bltsize(a6)
bwait
Plane3: move.l (a4)+,d3 ;address of bitplane 3 in d3
add.l d6,d3 ;add d6-(block putdown offset)
move.l d3,bltdpt(a6)
lea 40*256(a1),a1
move.l a1,bltapt(a6)
move.w #16*64+1,bltsize(a6)
bwait
Plane4: move.l (a4)+,d4 ;address of bitplane 4 in d3
add.l d6,d4 ;add d6-(block putdown offset)
move.l d4,bltdpt(a6)
lea 40*256(a1),a1
move.l a1,bltapt(a6)
move.w #16*64+1,bltsize(a6)
bwait
Plane5: move.l (a4)+,d5 ;address of bitplane 4 in d3
add.l d6,d5 ;add d6-(block putdown offset)
move.l d5,bltdpt(a6)
lea 40*256(a1),a1
move.l a1,bltapt(a6)
move.w #16*64+1,bltsize(a6)
bwait
dbf d7,scrloop
rts
putdowntab:
dc.w 000*fwidth+00,016*fwidth+00,032*fwidth+00,048*fwidth+00,064*fwidth+00,080*fwidth+00,096*fwidth+00,112*fwidth+00,128*fwidth+00,144*fwidth+00,160*fwidth+00,176*fwidth+00
dc.w 000*fwidth+02,016*fwidth+02,032*fwidth+02,048*fwidth+02,064*fwidth+02,080*fwidth+02,096*fwidth+02,112*fwidth+02,128*fwidth+02,144*fwidth+02,160*fwidth+02,176*fwidth+02
dc.w 000*fwidth+04,016*fwidth+04,032*fwidth+04,048*fwidth+04,064*fwidth+04,080*fwidth+04,096*fwidth+04,112*fwidth+04,128*fwidth+04,144*fwidth+04,160*fwidth+04,176*fwidth+04
dc.w 000*fwidth+06,016*fwidth+06,032*fwidth+06,048*fwidth+06,064*fwidth+06,080*fwidth+06,096*fwidth+06,112*fwidth+06,128*fwidth+06,144*fwidth+06,160*fwidth+06,176*fwidth+06
dc.w 000*fwidth+08,016*fwidth+08,032*fwidth+08,048*fwidth+08,064*fwidth+08,080*fwidth+08,096*fwidth+08,112*fwidth+08,128*fwidth+08,144*fwidth+08,160*fwidth+08,176*fwidth+08
dc.w 000*fwidth+10,016*fwidth+10,032*fwidth+10,048*fwidth+10,064*fwidth+10,080*fwidth+10,096*fwidth+10,112*fwidth+10,128*fwidth+10,144*fwidth+10,160*fwidth+10,176*fwidth+10
dc.w 000*fwidth+12,016*fwidth+12,032*fwidth+12,048*fwidth+12,064*fwidth+12,080*fwidth+12,096*fwidth+12,112*fwidth+12,128*fwidth+12,144*fwidth+12,160*fwidth+12,176*fwidth+12
dc.w 000*fwidth+14,016*fwidth+14,032*fwidth+14,048*fwidth+14,064*fwidth+14,080*fwidth+14,096*fwidth+14,112*fwidth+14,128*fwidth+14,144*fwidth+14,160*fwidth+14,176*fwidth+14
dc.w 000*fwidth+16,016*fwidth+16,032*fwidth+16,048*fwidth+16,064*fwidth+16,080*fwidth+16,096*fwidth+16,112*fwidth+16,128*fwidth+16,144*fwidth+16,160*fwidth+16,176*fwidth+16
dc.w 000*fwidth+18,016*fwidth+18,032*fwidth+18,048*fwidth+18,064*fwidth+18,080*fwidth+18,096*fwidth+18,112*fwidth+18,128*fwidth+18,144*fwidth+18,160*fwidth+18,176*fwidth+18
dc.w 000*fwidth+20,016*fwidth+20,032*fwidth+20,048*fwidth+20,064*fwidth+20,080*fwidth+20,096*fwidth+20,112*fwidth+20,128*fwidth+20,144*fwidth+20,160*fwidth+20,176*fwidth+20
dc.w 000*fwidth+22,016*fwidth+22,032*fwidth+22,048*fwidth+22,064*fwidth+22,080*fwidth+22,096*fwidth+22,112*fwidth+22,128*fwidth+22,144*fwidth+22,160*fwidth+22,176*fwidth+22
dc.w 000*fwidth+24,016*fwidth+24,032*fwidth+24,048*fwidth+24,064*fwidth+24,080*fwidth+24,096*fwidth+24,112*fwidth+24,128*fwidth+24,144*fwidth+24,160*fwidth+24,176*fwidth+24
dc.w 000*fwidth+26,016*fwidth+26,032*fwidth+26,048*fwidth+26,064*fwidth+26,080*fwidth+26,096*fwidth+26,112*fwidth+26,128*fwidth+26,144*fwidth+26,160*fwidth+26,176*fwidth+26
dc.w 000*fwidth+28,016*fwidth+28,032*fwidth+28,048*fwidth+28,064*fwidth+28,080*fwidth+28,096*fwidth+28,112*fwidth+28,128*fwidth+28,144*fwidth+28,160*fwidth+28,176*fwidth+28
dc.w 000*fwidth+30,016*fwidth+30,032*fwidth+30,048*fwidth+30,064*fwidth+30,080*fwidth+30,096*fwidth+30,112*fwidth+30,128*fwidth+30,144*fwidth+30,160*fwidth+30,176*fwidth+30
dc.w 000*fwidth+32,016*fwidth+32,032*fwidth+32,048*fwidth+32,064*fwidth+32,080*fwidth+32,096*fwidth+32,112*fwidth+32,128*fwidth+32,144*fwidth+32,160*fwidth+32,176*fwidth+32
dc.w 000*fwidth+34,016*fwidth+34,032*fwidth+34,048*fwidth+34,064*fwidth+34,080*fwidth+34,096*fwidth+34,112*fwidth+34,128*fwidth+34,144*fwidth+34,160*fwidth+34,176*fwidth+34
dc.w 000*fwidth+36,016*fwidth+36,032*fwidth+36,048*fwidth+36,064*fwidth+36,080*fwidth+36,096*fwidth+36,112*fwidth+36,128*fwidth+36,144*fwidth+36,160*fwidth+36,176*fwidth+36
dc.w 000*fwidth+38,016*fwidth+38,032*fwidth+38,048*fwidth+38,064*fwidth+38,080*fwidth+38,096*fwidth+38,112*fwidth+38,128*fwidth+38,144*fwidth+38,160*fwidth+38,176*fwidth+38
dc.w 000*fwidth+40,016*fwidth+40,032*fwidth+40,048*fwidth+40,064*fwidth+40,080*fwidth+40,096*fwidth+40,112*fwidth+40,128*fwidth+40,144*fwidth+40,160*fwidth+40,176*fwidth+40
dc.w 000*fwidth+42,016*fwidth+42,032*fwidth+42,048*fwidth+42,064*fwidth+42,080*fwidth+42,096*fwidth+42,112*fwidth+42,128*fwidth+42,144*fwidth+42,160*fwidth+42,176*fwidth+42
even
****************************************************************************
* THE SPRITE DATA GOES HERE FOR THE HERO (MAIN CHARACTER ONLY) *
****************************************************************************
Section ChipMust,Code_C ;nice one Vinh (nice and neat!)
**************************************************************************
clist: dc.w $0108,$0000,$010a,$0000
copperlist: DC.W $00e0,$0000,$00e2,$0000
DC.W $00e4,$0000,$00e6,$0000
DC.W $00e8,$0000,$00ea,$0000
DC.W $00ec,$0000,$00ee,$0000
DC.W $00f0,$0000,$00f2,$0000
DC.W $00f4,$0000,$00f6,$0000
DC.W bplcon0,$5200
scroll.value DC.W bplcon1,$0000,bpl1mod,$002e
DC.W bpl2mod,$002e,bplcon2,$0024
DC.W ddfstrt,$0028,ddfstop,$00D8
DC.W diwstrt,$2c71,diwstop,$2CD1
dc.w $01fc,0,$10c,0
levelpallette: DC.W $0180,$0000,$0182,$0000,$0184,$0000,$0186,$0000
DC.W $0188,$0000,$018A,$0000,$018C,$0000,$018E,$0000
DC.W $0190,$0000,$0192,$0000,$0194,$0000,$0196,$0000
DC.W $0198,$0000,$019A,$0000,$019C,$0000,$019E,$0000
dc.w $01a0,$0000
dc.w $01a2,$0FFF
dc.w $01a4,$0DDD
dc.w $01a6,$0AAA
dc.w $01a8,$0888
dc.w $01aA,$0555
dc.w $01aC,$0222
dc.w $01aE,$0000
dc.w $01b0,$000A
dc.w $01b2,$024A
dc.w $01b4,$044F
dc.w $01b6,$076F
dc.w $01b8,$000A
dc.w $01bA,$000A
dc.w $01bC,$000A
dc.w $01bE,$0F00
sprite0ptr: DC.W sprpt+0,$0000,sprpt+2,$0000
sprite1ptr: DC.W sprpt+4,$0000,sprpt+6,$0000
sprite2ptr: DC.W sprpt+8,$0000,sprpt+10,$0000
sprite3ptr DC.W sprpt+12,$0000,sprpt+14,$0000
DC.W sprpt+16,$0000,sprpt+18,$0000
DC.W sprpt+20,$0000,sprpt+22,$0000
DC.W sprpt+24,$0000,sprpt+26,$0000
DC.W sprpt+28,$0000,sprpt+30,$0000
dc.w $EA09,-2,$0100,$0200 ;panel start pos
dc.w ddfstrt,$0038,ddfstop,$00D0
dc.w $0108,$0000,$010a,$0000
DC.W bplcon1,$0000
panelplanes: DC.W $00E0,$0000,$00E2,$0000
DC.W $00E4,$0000,$00E6,$0000
DC.W $00E8,$0000,$00EA,$0000
DC.W $00EC,$0000,$00EE,$0000
dc.w $0100,$0200
panelpallette: dc.w $0180,$0000,$0182,$0000,$0184,$0000,$0186,$0000
dc.w $0188,$0000,$018a,$0000,$018c,$0000,$018e,$0000
dc.w $0190,$0000,$0192,$0000,$0194,$0000,$0196,$0000
dc.w $0198,$0000,$019a,$0000,$019c,$0000,$019e,$0000
dc.w $01a0,$0000,$01a2,$0000,$01a4,$0000,$01a6,$0000
dc.w $01a8,$0000,$01aa,$0000,$01ac,$0000,$01ae,$0000
dc.w $01b0,$0000,$01b2,$0000,$01b4,$0000,$01b6,$0000
dc.w $01b8,$0000,$01ba,$0000,$01bc,$0000,$01be,$0000
DC.W $FFE1,$FFfe
DC.W $FFFF,$FFFE
even
map: incbin miscsource:lv1.map
blocks incbin miscsource:paroblocks.bin
offsetab:
dc.w 00*40+0,00*40+2,00*40+4,00*40+6,00*40+8,00*40+10,00*40+12,00*40+14,00*40+16,00*40+18,00*40+20,00*40+22,00*40+24,00*40+26,00*40+28,00*40+30,00*40+32,00*40+34,00*40+36,00*40+38
dc.w 16*40+0,16*40+2,16*40+4,16*40+6,16*40+8,16*40+10,16*40+12,16*40+14,16*40+16,16*40+18,16*40+20,16*40+22,16*40+24,16*40+26,16*40+28,16*40+30,16*40+32,16*40+34,16*40+36,16*40+38
dc.w 32*40+0,32*40+2,32*40+4,32*40+6,32*40+8,32*40+10,32*40+12,32*40+14,32*40+16,32*40+18,32*40+20,32*40+22,32*40+24,32*40+26,32*40+28,32*40+30,32*40+32,32*40+34,32*40+36,32*40+38
dc.w 48*40+0,48*40+2,48*40+4,48*40+6,48*40+8,48*40+10,48*40+12,48*40+14,48*40+16,48*40+18,48*40+20,48*40+22,48*40+24,48*40+26,48*40+28,48*40+30,48*40+32,48*40+34,48*40+36,48*40+38
dc.w 64*40+0,64*40+2,64*40+4,64*40+6,64*40+8,64*40+10,64*40+12,64*40+14,64*40+16,64*40+18,64*40+20,64*40+22,64*40+24,64*40+26,64*40+28,64*40+30,64*40+32,64*40+34,64*40+36,64*40+38
dc.w 80*40+0,80*40+2,80*40+4,80*40+6,80*40+8,80*40+10,80*40+12,80*40+14,80*40+16,80*40+18,80*40+20,80*40+22,80*40+24,80*40+26,80*40+28,80*40+30,80*40+32,80*40+34,80*40+36,80*40+38
dc.w 96*40+0,96*40+2,96*40+4,96*40+6,96*40+8,96*40+10,96*40+12,96*40+14,96*40+16,96*40+18,96*40+20,96*40+22,96*40+24,96*40+26,96*40+28,96*40+30,96*40+32,96*40+34,96*40+36,96*40+38
dc.w 112*40+0,112*40+2,112*40+4,112*40+6,112*40+8,112*40+10,112*40+12,112*40+14,112*40+16,112*40+18,112*40+20,112*40+22,112*40+24,112*40+26,112*40+28,112*40+30,112*40+32,112*40+34,112*40+36,112*40+38
dc.w 128*40+0,128*40+2,128*40+4,128*40+6,128*40+8,128*40+10,128*40+12,128*40+14,128*40+16,128*40+18,128*40+20,128*40+22,128*40+24,128*40+26,128*40+28,128*40+30,128*40+32,128*40+34,128*40+36,128*40+38
dc.w 144*40+0,144*40+2,144*40+4,144*40+6,144*40+8,144*40+10,144*40+12,144*40+14,144*40+16,144*40+18,144*40+20,144*40+22,144*40+24,144*40+26,144*40+28,144*40+30,144*40+32,144*40+34,144*40+36,144*40+38
dc.w 160*40+0,160*40+2,160*40+4,160*40+6,160*40+8,160*40+10,160*40+12,160*40+14,160*40+16,160*40+18,160*40+20,160*40+22,160*40+24,160*40+26,160*40+28,160*40+30,160*40+32,160*40+34,160*40+36,160*40+38
dc.w 176*40+0,176*40+2,176*40+4,176*40+6,176*40+8,176*40+10,176*40+12,176*40+14,176*40+16,176*40+18,176*40+20,176*40+22,176*40+24,176*40+26,176*40+28,176*40+30,176*40+32,176*40+34,176*40+36,176*40+38
even
section membss,code_c
Mem ds.b memneeded